package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IPolicyPermissionsDAO;
import org.jsola.hr.dto.PolicyPermissionsAddDTO;
import org.jsola.hr.dto.PolicyPermissionsUpdateDTO;
import org.jsola.hr.entity.PolicyPermissionsDO;
import org.jsola.hr.query.PolicyPermissionsQuery;
import org.jsola.hr.vo.PolicyPermissionsListVO;
import org.jsola.hr.vo.PolicyPermissionsVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 政策速递权限
 *
 * @author zhr
 */
public interface IPolicyPermissionsService extends IService<IPolicyPermissionsDAO, PolicyPermissionsDO> {

    /**
     * 新增政策速递权限
     *
     * @param policyPermissionsAddDTO 新增政策速递权限DTO
     * @param tokenUser               当前用户
     * @return 政策速递权限详情信息
     */
    PolicyPermissionsVO save(PolicyPermissionsAddDTO policyPermissionsAddDTO, TokenUser tokenUser);

    /**
     * 修改政策速递权限
     *
     * @param policyPermissionsUpdateDTO 修改政策速递权限DTO
     * @param tokenUser                  当前用户
     * @return 更新数量
     */
    int update(PolicyPermissionsUpdateDTO policyPermissionsUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除政策速递权限，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser            当前用户
     * @param policyPermissionsIds 政策速递权限id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... policyPermissionsIds);

    /**
     * 根据政策速递权限id查找
     *
     * @param policyPermissionsId 政策速递权限id
     * @param siteId              所属站点id
     * @return 政策速递权限详情信息
     */
    PolicyPermissionsVO selectById(String policyPermissionsId, String siteId);

    /**
     * 查询政策速递权限
     *
     * @param policyPermissionsQuery 查询条件
     * @param siteId                 所属站点id
     * @return 政策速递权限列表信息
     */
    List<PolicyPermissionsListVO> select(PolicyPermissionsQuery policyPermissionsQuery, String siteId);

    /**
     * 查询政策速递权限记录数
     *
     * @param policyPermissionsQuery 查询条件
     * @param siteId                 所属站点id
     * @return 政策速递权限记录数
     */
    int selectCount(PolicyPermissionsQuery policyPermissionsQuery, String siteId);

    /**
     * 分页查询政策速递权限
     *
     * @param policyPermissionsQuery 查询条件
     * @param siteId                 所属站点id
     * @return 政策速递权限列表信息
     */
    Page<PolicyPermissionsListVO> selectPage(PolicyPermissionsQuery policyPermissionsQuery, String siteId);


    /**
     * 根据政策速递权限id查找
     *
     * @param policyPermissionsId 政策速递权限id
     * @param siteId              所属站点id
     * @return 政策速递权限
     */
    PolicyPermissionsDO selectDOById(String policyPermissionsId, String siteId);

    /**
     * 查询政策速递权限
     *
     * @param policyPermissionsQuery 查询条件
     * @param siteId                 所属站点id
     * @return 政策速递权限列表
     */
    List<PolicyPermissionsDO> selectDO(PolicyPermissionsQuery policyPermissionsQuery, String siteId);

    /**
     * 批量保存
     *
     * @param saveList 保存列表
     */
    void bachSave(List<PolicyPermissionsDO> saveList);

    /**
     * 根据政策速递Id删除它对应的权限
     *
     * @param policyId 政策速递Id
     * @param siteId   站点
     * @return 删除结果
     */
    Integer deleteByPolicyId(String policyId, String siteId);

    /**
     * 根据政策速递id列表查询
     *
     * @param policyIdList 政策速递id列表
     * @param tokenUser    当前用户
     * @return 权限
     */
    List<PolicyPermissionsDO> selectByPolicyIdList(List<String> policyIdList, TokenUser tokenUser);
}


